package com.miracle.erp.service.Impl;


import java.util.List;

import com.miracle.erp.dao.IUserDao;
import com.miracle.erp.model.User;
import com.miracle.erp.service.IUserService;
import com.miracle.erp.util.ERPException;
import com.miracle.erp.util.ObjectFactory;

public class UserService implements IUserService{
		// 成员变量
		private IUserDao userDao = ObjectFactory.getUserDao();
		
	@Override
	public User login(User user) throws ERPException {
		// 登陆的情况
		// 根据传进的数据去数据库中查询信息
		// 用户名 密码是传入的信息  所以以用户名为唯一标识
		// ① 根据用户名查询信息，进行比对
		// 把数据库得到的信息封装 提取出来 与servlet的信息比对
		User oldUser = userDao.loadByUsername(user.getUsername());
		// 如果用户名不存在，传出信息用户名不存在
		if(oldUser == null){
			throw new ERPException("用户名不存在！");
		}
		// 如果用户名存在，密码不正确，传出信息密码不正确
		if (!oldUser.getPassword().equals(user.getPassword())){
			throw new ERPException("密码不正确！");
		}
		// 如果用户名存在，密码正确，返回用户的信息给loginUser
		return oldUser;
		// 所以这里应该自定义异常类来抛出异常，给servlet传递异常信息，返回给页面
	
	}

	@Override
	public List<User> list() {
		// 接口的对象 然后去调用list方法
			// 直接去调用实现类的方法
			return  userDao.list();
	}

	@Override
	public void delete(User user) {
			// 调用userDao的方法删除
			userDao.delete(user);
	}

	@Override
	public void add(User user) throws ERPException {
		// 添加数据 调用userDao的方法去操作数据库
		
		// ★★★ 可能存在的bug  用户名一致的情况
		
		userDao.add(user);
		
	}

	@Override
	public User load(int id) {
		return userDao.load(id);
	}

	@Override
//	public void update(User user)throws ERPException {
		public void update(User user) {
		// 刚才有返回值 返回值调用的dao去交互的
		// 现在没有了 应该分类讨论
		// 直接调用dao试试
//		user.update();              不可取
		 
		// 这里为什么要去根据id 查询对象
		// id 是唯一的凭证 
		// 我们有根据id去查询数据的方法
		
		//1 根据id查询到这个修改信息的人的信息
//		User editUser  = userDao.load(user.getId());
		
		userDao.update(user);
		
	}
	
}
